#include <head.h>

int main(int argc, char const *argv[])
{
    // 创建子进程，退出父进程。
    pid_t pid = 0;
    if(-1 == (pid = fork()))
    {
        ERRLOG("创建子进程失败");
    }
    if (pid > 0) // 父进程
    {
        exit(0);
    }
    
    // 在子进程中调用 setsid() 创建新的会话，使子进程成为新的会话首进程，并脱离终端控制。
    pid_t sid = 0;
    if(-1 == (sid = setsid()))
    {
        ERRLOG("创建会话失败");
    }

    // 将当前工作目录更改为根目录，以防止占用挂载点。 chdir()
    chdir("/");

    // 重设文件权限掩码，以避免继承父进程的权限掩码。umask
    umask(0);
    // 关闭不再需要的文件描述符（如标准输入、输出、错误）。
    close(0);
    close(1);
    close(2);
    // 守护进程进入一个无限循环，执行预定的任务。

    char buf[128] = "日志 明天放假\n";
    int fd = open("/tmp/log.log" , O_CREAT | O_WRONLY , 0666 );
    while (1)
    {
        write(fd , buf , strlen(buf));

        sleep(1);
        
    }
    
    return 0;
}